// 闭包： 函数和其周围的的状态的引用捆绑在一起形成了闭包， 可以在另一个作用域中调用一个函数的内部函数，并访问到该函数的作用域中的成员
// 本质： 函数在执行的时候会放到一个执行栈在执行，执行完毕之后会从执行栈上移除，但是堆上的作用域成员因为被外部成员引用得不到释放，
//        因此，内部函数依然可以访问到外部函数的成员  ，好处就是内部函数延长了外部函数的作用域范围 

function makePower (power) {
  return function (number) {
    return Math.pow(power, number)
  }
}

let power1 = makePower(2)
let power2 = makePower(3)

console.log(power1(4))
console.log(power2(5))

